#include "SQLCastExpr.h"
#include "../../visitor/SQLASTVisitor.h"

SQLCastExpr::SQLCastExpr()
{
}

SQLCastExpr::~SQLCastExpr()
{
	// if (expr != NULL)
	// {
	// 	// delete expr;
	// 	expr = NULL;
	// }

	// if (dataType != NULL)
	// {
	// 	// delete dataType;
	// 	dataType = NULL;
	// }
}
SQLExpr_ptr SQLCastExpr::getExpr()
{
	return (expr);
}

void SQLCastExpr::setExpr(SQLExpr_ptr theExpr)
{
	if (theExpr != NULL)
	{
		theExpr->setParent(SharedObject(SQLCastExpr));
	}
	expr = theExpr;
}

SQLDataType_ptr SQLCastExpr::getDataType()
{
	return dataType;
}

void SQLCastExpr::setDataType(SQLDataType_ptr theDataType)
{
	dataType = theDataType;
}

void SQLCastExpr::accept0(SQLASTVisitor_ptr visitor)
{
	if (visitor->visit(SharedObject(SQLCastExpr)))
	{
		acceptChild(visitor, expr);
		acceptChild(visitor, dataType);
	}
	visitor->endVisit(SharedObject(SQLCastExpr));
}

// int SQLCastExpr::hashCode() {
// final int prime = 31;
// int result = 1;
// result = prime * result + ((dataType == NULL) ? 0 : dataType.hashCode());
// result = prime * result + ((expr == NULL) ? 0 : expr.hashCode());
// return result;
//}

// BOOL_ptr SQLCastExpr::equals(Object obj) {
// if (this == obj) {
// return BOOL::TRUE;
//}
// if (obj == NULL) {
// return BOOL::FALSE;
//}
// if (getClass() != obj.getClass()) {
// return BOOL::FALSE;
//}
// SQLCastExpr other = (SQLCastExpr) obj;
// if (dataType == NULL) {
// if (other.dataType != NULL) {
// return BOOL::FALSE;
//}
//} else if (!dataType.equals(other.dataType)) {
// return BOOL::FALSE;
//}
// if (expr == NULL) {
// if (other.expr != NULL) {
// return BOOL::FALSE;
//}
//} else if (!expr.equals(other.expr)) {
// return BOOL::FALSE;
//}
// return BOOL::TRUE;
//}
